/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

// 非常简单,验证单链表里面是否有环状结构
// 就是说: 单链表里面,尾节点不是指向空,而是指向了某一位置的节点
// 数学证明自己看,我们可以通过定义快慢指正解决
// 因为如果里面有环,快指针最后会和慢指针相遇,就可以证明里面有环了

typedef struct ListNode ListNode ;

bool hasCycle(struct ListNode *head) 
{

    ListNode *slow , *fast ;

    slow = fast = head ;

    while (fast && fast -> next)
    {

        slow = slow -> next ;

        fast = fast -> next -> next ;

        if (slow == fast)
        {

            return true ;

        }

    }

    return false ;
    
}